package com.ff.xyh.front.service;

import com.ff.xyh.common.entity.result.ResultCode;
import com.ff.xyh.common.entity.result.ResultMessage;
import com.ff.xyh.common.entity.result.ResultObject;
import com.ff.xyh.common.entity.userfront.FrontUser;
import com.ff.xyh.common.entity.userfront.UserFavorite;
import com.ff.xyh.common.entity.userfront.UserRestricted;
import com.ff.xyh.common.utils.JwtUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.UUID;

/**
 * @Auther FF
 * @Date 2022年 12月 06日
 * @Time 02:06
 */

public interface UserFeignService {

    /**
     * 登录
     */
    ResultObject login(
            String userToken, String password) ;

    /**
     * token登录
     */
    ResultObject loginWithToken(String token);

    /**
     * 注册
     */
    ResultObject register(
            FrontUser frontUser) ;

    /**
     * 上传头像 如果是第二次上传 则需要在请求头avatar中加入上次上传返回的路径
     */
    ResultObject uploadAvatar(
            MultipartFile multipartFile,
            HttpServletRequest request) ;

    /**
     * 获取当前登录的用户id, 昵称, 头像, 性别, token 需要在请求中携带token
     */
    @GetMapping("current")
    ResultObject getCurrentUser(HttpServletRequest request) ;

    /**
     * 通过id获取用户信息，仅测试用
     */
    ResultObject getUserById(
            String id) ;

    /**
     * 判断 用户名 是否已被注册
     */
    ResultObject hasUserUsername(
            String username) ;

    /**
     * 判断 学号 是否已被注册
     */
    ResultObject hasUserSno(
            String sno) ;

    /**
     * 判断 邮箱 是否已被注册
     */
    ResultObject hasUserEmail(
            String email) ;

    /**
     * 判断 手机号 是否已被注册
     */
    ResultObject hasUserPhone(
            String phone) ;

    /**
     * 更新用户信息，无法修改密码
     */
    ResultObject updateUser (
            FrontUser frontUser) ;

    /**
     * 修改密码 需要在请求头中传入token
     */
    ResultObject updateUserPasswordWithToken (
            String password,
            HttpServletRequest request) ;


    /**
     * 根据id删除用户
     */
    ResultObject deleteUserById (
            String id) ;


    /**
     * 用户拉黑
     */
    ResultObject insertUserBlack(
            String id, String blackerId ) ;

    /**
     * 取消拉黑
     */
    ResultObject deleteUserBlack(
            String id, String blackerId) ;

    /**
     * 用户收藏
     */
    ResultObject insertUserFavorite(
            String id, String postId, String postType ) ;

    /**
     * 取消收藏
     * @param id
     * @param postId
     * @param postType
     * @return
     */
    ResultObject deleteUserFavorite(
            String id, String postId, String postType ) ;
    /**
     * 用户关注
     */
    ResultObject insertUserFollow(
            String id, String followerId ) ;

    /**
     * 取消关注
     */
    ResultObject deleteUserFollow(
            String id, String followerId ) ;

    /**
     * 根据用户id 取消所有关注信息
     */
    ResultObject deleteUserFollowById(
            String id ) ;

    /**
     * 用户封号
     */
    ResultObject userRestrict(UserRestricted userRestricted) ;

    /**
     * 解除封号
     * @param userRestricted
     * @return
     */
    ResultObject userRestrictDelete(UserRestricted userRestricted) ;

    ResultObject getUserBaseById(String id);

    ResultObject getUserByOpenid(String openid);

}
